﻿using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;

namespace CapaDatos
{
    /// <summary>
    /// Gestor.
    /// Gestor que permite el fácil manejo de Phantom.
    /// </summary>
    /// <typeparam name="T">Entidad.</typeparam>
    public static class Gestor<T>
    {
        public static T Cargar(T pretabla)
        {
            return (T)CapaDatos.Datos.Manejador[typeof(T)].Cargar(pretabla);
        }

        public static void Cargar(ref T pretabla, string where)
        {
            pretabla = (T)CapaDatos.Datos.Manejador[typeof(T)].Cargar(typeof(T), where);
        }

        public static T Insertar(T pretabla)
        {
            return (T)CapaDatos.Datos.Manejador[typeof(T)].Insertar(pretabla);
        }

        public static void Eliminar(T pretabla)
        {
            CapaDatos.Datos.Manejador[typeof(T)].Eliminar(pretabla);
        }

        public static void Modificar(T pretabla)
        {
            CapaDatos.Datos.Manejador[typeof(T)].Modificar(pretabla);
        }

        public static List<T> Listar()
        {
            IList listaAbstracta = CapaDatos.Datos.Manejador[typeof(T)].Listar(typeof(T));
            List<T> lista = listaAbstracta.Cast<T>().ToList<T>();
            return lista;
        }

        public static List<T> Listar(string where)
        {
            IList listaAbstracta = CapaDatos.Datos.Manejador[typeof(T)].Listar(typeof(T), where);
            List<T> lista = listaAbstracta.Cast<T>().ToList<T>();
            return lista;
        }

        public static DataSet Consultar(string consulta)
        {
            return CapaDatos.Datos.Manejador[typeof(T)].Fabrica.Consultar(consulta);
        }
    }
}
